{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"Bank_FE_train_org.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Gender</th>\n",
       "      <th>City</th>\n",
       "      <th>Monthly_Income</th>\n",
       "      <th>Loan_Amount_Applied</th>\n",
       "      <th>Loan_Tenure_Applied</th>\n",
       "      <th>Existing_EMI</th>\n",
       "      <th>Salary_Account</th>\n",
       "      <th>Mobile_Verified</th>\n",
       "      <th>Var5</th>\n",
       "      <th>Var1</th>\n",
       "      <th>...</th>\n",
       "      <th>EMI_Loan_Submitted</th>\n",
       "      <th>Filled_Form</th>\n",
       "      <th>Device_Type</th>\n",
       "      <th>Var2</th>\n",
       "      <th>Source</th>\n",
       "      <th>Var4</th>\n",
       "      <th>Disbursed</th>\n",
       "      <th>Lead_Creation_Date_Month</th>\n",
       "      <th>Lead_Creation_Date_Season</th>\n",
       "      <th>Lead_Creation_Date_Year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>20000</td>\n",
       "      <td>300000.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>35000</td>\n",
       "      <td>200000.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>13.0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>6762.9</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>22500</td>\n",
       "      <td>600000.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>35000</td>\n",
       "      <td>1000000.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>100000</td>\n",
       "      <td>500000.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>25000.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>17.0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Gender  City  Monthly_Income  Loan_Amount_Applied  Loan_Tenure_Applied  \\\n",
       "0       0     0           20000             300000.0                  5.0   \n",
       "1       1     1           35000             200000.0                  2.0   \n",
       "2       1     2           22500             600000.0                  4.0   \n",
       "3       1     3           35000            1000000.0                  5.0   \n",
       "4       1     4          100000             500000.0                  2.0   \n",
       "\n",
       "   Existing_EMI  Salary_Account  Mobile_Verified  Var5  Var1  ...  \\\n",
       "0           0.0               0                0   0.0     0  ...   \n",
       "1           0.0               1                1  13.0     1  ...   \n",
       "2           0.0               2                1   0.0     0  ...   \n",
       "3           0.0               2                1  10.0     0  ...   \n",
       "4       25000.0               0                1  17.0     0  ...   \n",
       "\n",
       "   EMI_Loan_Submitted  Filled_Form  Device_Type  Var2  Source  Var4  \\\n",
       "0                 0.0            0            0     0       0     1   \n",
       "1              6762.9            0            0     0       0     3   \n",
       "2                 0.0            0            0     1       1     1   \n",
       "3                 0.0            0            0     1       1     3   \n",
       "4                 0.0            0            0     1       2     3   \n",
       "\n",
       "   Disbursed  Lead_Creation_Date_Month  Lead_Creation_Date_Season  \\\n",
       "0        0.0                         4                          1   \n",
       "1        0.0                         4                          1   \n",
       "2        0.0                         4                          1   \n",
       "3        0.0                         4                          1   \n",
       "4        0.0                         4                          1   \n",
       "\n",
       "   Lead_Creation_Date_Year  \n",
       "0                       15  \n",
       "1                       15  \n",
       "2                       15  \n",
       "3                       15  \n",
       "4                       15  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0        0\n",
      "1        0\n",
      "2        0\n",
      "3        0\n",
      "4        0\n",
      "        ..\n",
      "87014    0\n",
      "87015    0\n",
      "87016    0\n",
      "87017    0\n",
      "87018    0\n",
      "Name: Disbursed, Length: 87019, dtype: int64\n",
      "(87019, 23)\n",
      "85746\n",
      "1273\n",
      "0\n"
     ]
    }
   ],
   "source": [
    "# drop ids and get labels\n",
    "y_train = train['Disbursed'].astype(np.int64)\n",
    "\n",
    "X_train = train.drop([\"Disbursed\"], axis=1)\n",
    "\n",
    "#保存特征名字以备后用（可视化）\n",
    "feat_names = X_train.columns \n",
    "\n",
    "#sklearn的学习器大多之一稀疏数据输入，模型训练会快很多\n",
    "#查看一个学习器是否支持稀疏数据，可以看fit函数是否支持: X: {array-like, sparse matrix}.\n",
    "#可自行用timeit比较稠密数据和稀疏数据的训练时间\n",
    "from scipy.sparse import csr_matrix\n",
    "X_train = csr_matrix(X_train)\n",
    "\n",
    "print(y_train)\n",
    "print(X_train.shape)\n",
    "for aaa in y_train:\n",
    "    if aaa == 0:\n",
    "        pass\n",
    "    elif aaa == 1:\n",
    "        pass\n",
    "    else:\n",
    "        print(aaa)\n",
    "print(np.sum(y_train==0))\n",
    "print(np.sum(y_train==1))\n",
    "print(np.sum(y_train==2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import StratifiedKFold\n",
    "kfold = StratifiedKFold(n_splits=3, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "MAX_ROUNDS = 10000\n",
    "\n",
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def get_n_estimators(params, X_train , y_train , early_stopping_rounds=10):\n",
    "    xgb_params = params.copy()\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgb_train = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_params, xgb_train, num_boost_round=MAX_ROUNDS, nfold=3,\n",
    "             metrics='logloss', early_stopping_rounds=early_stopping_rounds,seed=3, verbose_eval=True)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "         \n",
    "    print('best n_estimators:' , n_estimators)\n",
    "    print('best cv score:' , cvresult['test-logloss-mean'][n_estimators-1])\n",
    "    \n",
    "    return n_estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-logloss:0.603525+7.08347e-05\ttest-logloss:0.603572+7.70757e-05\n",
      "[1]\ttrain-logloss:0.530158+0.000150752\ttest-logloss:0.53025+7.51192e-05\n",
      "[2]\ttrain-logloss:0.469043+0.000206108\ttest-logloss:0.469159+0.00015776\n",
      "[3]\ttrain-logloss:0.417488+0.000280914\ttest-logloss:0.417635+0.000207083\n",
      "[4]\ttrain-logloss:0.373581+0.000362402\ttest-logloss:0.373746+0.000236573\n",
      "[5]\ttrain-logloss:0.335806+0.000412181\ttest-logloss:0.33604+0.00026522\n",
      "[6]\ttrain-logloss:0.30318+0.000469213\ttest-logloss:0.303458+0.000313655\n",
      "[7]\ttrain-logloss:0.274853+0.00050488\ttest-logloss:0.275186+0.000346304\n",
      "[8]\ttrain-logloss:0.250174+0.000551436\ttest-logloss:0.250551+0.000367511\n",
      "[9]\ttrain-logloss:0.228565+0.000608233\ttest-logloss:0.228992+0.000414775\n",
      "[10]\ttrain-logloss:0.209573+0.000646298\ttest-logloss:0.210065+0.000465418\n",
      "[11]\ttrain-logloss:0.192859+0.000666817\ttest-logloss:0.193422+0.000509241\n",
      "[12]\ttrain-logloss:0.178123+0.000655096\ttest-logloss:0.178735+0.000623148\n",
      "[13]\ttrain-logloss:0.165085+0.000655466\ttest-logloss:0.165793+0.00070889\n",
      "[14]\ttrain-logloss:0.153543+0.00064484\ttest-logloss:0.154315+0.000771653\n",
      "[15]\ttrain-logloss:0.143328+0.000656193\ttest-logloss:0.144174+0.000827394\n",
      "[16]\ttrain-logloss:0.13425+0.000679279\ttest-logloss:0.135174+0.000897627\n",
      "[17]\ttrain-logloss:0.126233+0.000701498\ttest-logloss:0.127206+0.00095802\n",
      "[18]\ttrain-logloss:0.1191+0.000703308\ttest-logloss:0.120155+0.00101486\n",
      "[19]\ttrain-logloss:0.112722+0.000713125\ttest-logloss:0.113863+0.00106035\n",
      "[20]\ttrain-logloss:0.107048+0.000742716\ttest-logloss:0.108279+0.00108535\n",
      "[21]\ttrain-logloss:0.101985+0.000738902\ttest-logloss:0.103308+0.00115707\n",
      "[22]\ttrain-logloss:0.097514+0.000751182\ttest-logloss:0.098905+0.00121284\n",
      "[23]\ttrain-logloss:0.0935497+0.000805004\ttest-logloss:0.0950203+0.00124438\n",
      "[24]\ttrain-logloss:0.0900157+0.000812685\ttest-logloss:0.0915883+0.00129128\n",
      "[25]\ttrain-logloss:0.0868637+0.000793384\ttest-logloss:0.088511+0.00135231\n",
      "[26]\ttrain-logloss:0.084038+0.000815875\ttest-logloss:0.0857637+0.00139665\n",
      "[27]\ttrain-logloss:0.0815167+0.000811664\ttest-logloss:0.083333+0.00147507\n",
      "[28]\ttrain-logloss:0.0792433+0.000781303\ttest-logloss:0.0811657+0.00153867\n",
      "[29]\ttrain-logloss:0.077213+0.000810645\ttest-logloss:0.0792273+0.00155368\n",
      "[30]\ttrain-logloss:0.075406+0.000819066\ttest-logloss:0.0775187+0.0015863\n",
      "[31]\ttrain-logloss:0.073784+0.000823088\ttest-logloss:0.0759657+0.00161678\n",
      "[32]\ttrain-logloss:0.0723213+0.00081185\ttest-logloss:0.0746487+0.00167789\n",
      "[33]\ttrain-logloss:0.071072+0.000791592\ttest-logloss:0.073488+0.00175158\n",
      "[34]\ttrain-logloss:0.069892+0.000813012\ttest-logloss:0.0723923+0.00177947\n",
      "[35]\ttrain-logloss:0.0688413+0.000818067\ttest-logloss:0.0714497+0.00180007\n",
      "[36]\ttrain-logloss:0.0679103+0.000812605\ttest-logloss:0.0706293+0.0018538\n",
      "[37]\ttrain-logloss:0.0670573+0.000827636\ttest-logloss:0.0698877+0.00190854\n",
      "[38]\ttrain-logloss:0.0662537+0.000840563\ttest-logloss:0.0692023+0.00192271\n",
      "[39]\ttrain-logloss:0.0655523+0.000836609\ttest-logloss:0.0686073+0.00194537\n",
      "[40]\ttrain-logloss:0.0649057+0.000847079\ttest-logloss:0.0680747+0.00196517\n",
      "[41]\ttrain-logloss:0.0643477+0.00088068\ttest-logloss:0.067615+0.00197091\n",
      "[42]\ttrain-logloss:0.0638273+0.00087266\ttest-logloss:0.0672253+0.0019843\n",
      "[43]\ttrain-logloss:0.06333+0.000869465\ttest-logloss:0.0668677+0.00201503\n",
      "[44]\ttrain-logloss:0.0628873+0.000881631\ttest-logloss:0.066545+0.00204923\n",
      "[45]\ttrain-logloss:0.0624723+0.000925772\ttest-logloss:0.0662363+0.00205867\n",
      "[46]\ttrain-logloss:0.062082+0.000922699\ttest-logloss:0.065943+0.00207536\n",
      "[47]\ttrain-logloss:0.0616967+0.000921968\ttest-logloss:0.065681+0.00209024\n",
      "[48]\ttrain-logloss:0.0613607+0.000929487\ttest-logloss:0.065484+0.00212572\n",
      "[49]\ttrain-logloss:0.061076+0.000958364\ttest-logloss:0.0652847+0.0020959\n",
      "[50]\ttrain-logloss:0.060713+0.000965225\ttest-logloss:0.0650687+0.00207399\n",
      "[51]\ttrain-logloss:0.0604537+0.000945003\ttest-logloss:0.0649067+0.00208896\n",
      "[52]\ttrain-logloss:0.0602007+0.000949979\ttest-logloss:0.0647533+0.00210886\n",
      "[53]\ttrain-logloss:0.05994+0.000918779\ttest-logloss:0.0646257+0.00210629\n",
      "[54]\ttrain-logloss:0.059736+0.000915147\ttest-logloss:0.064482+0.00210933\n",
      "[55]\ttrain-logloss:0.059527+0.000922952\ttest-logloss:0.0643843+0.0021245\n",
      "[56]\ttrain-logloss:0.059349+0.00092797\ttest-logloss:0.064296+0.00210464\n",
      "[57]\ttrain-logloss:0.05916+0.000918536\ttest-logloss:0.0641963+0.00211595\n",
      "[58]\ttrain-logloss:0.0589843+0.000916431\ttest-logloss:0.0641037+0.00211868\n",
      "[59]\ttrain-logloss:0.0588327+0.00091774\ttest-logloss:0.064027+0.00213219\n",
      "[60]\ttrain-logloss:0.0586897+0.000926543\ttest-logloss:0.0639647+0.00211226\n",
      "[61]\ttrain-logloss:0.0585357+0.000954128\ttest-logloss:0.0639123+0.00210048\n",
      "[62]\ttrain-logloss:0.0583477+0.00090173\ttest-logloss:0.0638303+0.00213424\n",
      "[63]\ttrain-logloss:0.0581717+0.000892182\ttest-logloss:0.063767+0.00213349\n",
      "[64]\ttrain-logloss:0.058032+0.000907707\ttest-logloss:0.0637467+0.00213589\n",
      "[65]\ttrain-logloss:0.0578933+0.000914319\ttest-logloss:0.063694+0.00212381\n",
      "[66]\ttrain-logloss:0.0577847+0.000929106\ttest-logloss:0.0636383+0.00211663\n",
      "[67]\ttrain-logloss:0.0576457+0.00096161\ttest-logloss:0.063571+0.00206953\n",
      "[68]\ttrain-logloss:0.0574817+0.000982572\ttest-logloss:0.063538+0.00208119\n",
      "[69]\ttrain-logloss:0.0573067+0.00095159\ttest-logloss:0.0634793+0.0021371\n",
      "[70]\ttrain-logloss:0.0571393+0.000926659\ttest-logloss:0.0634457+0.0021659\n",
      "[71]\ttrain-logloss:0.057016+0.00094971\ttest-logloss:0.0634247+0.00218775\n",
      "[72]\ttrain-logloss:0.0568847+0.00095248\ttest-logloss:0.0633717+0.00219799\n",
      "[73]\ttrain-logloss:0.0567413+0.000942379\ttest-logloss:0.0633547+0.00220871\n",
      "[74]\ttrain-logloss:0.0566093+0.000910724\ttest-logloss:0.0633023+0.00221149\n",
      "[75]\ttrain-logloss:0.056488+0.000911801\ttest-logloss:0.0632953+0.00218852\n",
      "[76]\ttrain-logloss:0.0563687+0.000911983\ttest-logloss:0.0632807+0.00222507\n",
      "[77]\ttrain-logloss:0.0562517+0.000933299\ttest-logloss:0.0632457+0.00219402\n",
      "[78]\ttrain-logloss:0.0561503+0.000901489\ttest-logloss:0.0632433+0.00219915\n",
      "[79]\ttrain-logloss:0.0560173+0.000905031\ttest-logloss:0.0632167+0.00223361\n",
      "[80]\ttrain-logloss:0.0559197+0.000889142\ttest-logloss:0.063211+0.00220277\n",
      "[81]\ttrain-logloss:0.05578+0.000869286\ttest-logloss:0.0632013+0.00223022\n",
      "[82]\ttrain-logloss:0.0556833+0.000909313\ttest-logloss:0.0631973+0.00223829\n",
      "[83]\ttrain-logloss:0.0555943+0.000913825\ttest-logloss:0.0631647+0.00224563\n",
      "[84]\ttrain-logloss:0.0555123+0.000926438\ttest-logloss:0.0631573+0.00224397\n",
      "[85]\ttrain-logloss:0.0554283+0.000902228\ttest-logloss:0.0631367+0.00226158\n",
      "[86]\ttrain-logloss:0.0553077+0.000919535\ttest-logloss:0.0631427+0.00228649\n",
      "[87]\ttrain-logloss:0.0552237+0.000917104\ttest-logloss:0.063143+0.00230084\n",
      "[88]\ttrain-logloss:0.0551233+0.000929445\ttest-logloss:0.0631183+0.00229813\n",
      "[89]\ttrain-logloss:0.055042+0.000900366\ttest-logloss:0.0631097+0.00230312\n",
      "[90]\ttrain-logloss:0.0549577+0.000894046\ttest-logloss:0.0630897+0.00231412\n",
      "[91]\ttrain-logloss:0.054827+0.000872848\ttest-logloss:0.06308+0.00233794\n",
      "[92]\ttrain-logloss:0.0547447+0.000885624\ttest-logloss:0.063079+0.00234668\n",
      "[93]\ttrain-logloss:0.054667+0.000887375\ttest-logloss:0.063062+0.0023336\n",
      "[94]\ttrain-logloss:0.0545553+0.000876954\ttest-logloss:0.063045+0.00235824\n",
      "[95]\ttrain-logloss:0.054489+0.000866901\ttest-logloss:0.0630533+0.00236236\n",
      "[96]\ttrain-logloss:0.0544023+0.000857656\ttest-logloss:0.0630613+0.00237484\n",
      "[97]\ttrain-logloss:0.054276+0.000925139\ttest-logloss:0.0630653+0.00237945\n",
      "[98]\ttrain-logloss:0.0541353+0.000872404\ttest-logloss:0.0630643+0.00239742\n",
      "[99]\ttrain-logloss:0.0540317+0.000896261\ttest-logloss:0.06307+0.0023776\n",
      "[100]\ttrain-logloss:0.0538893+0.000889307\ttest-logloss:0.0630437+0.00237604\n",
      "[101]\ttrain-logloss:0.0538017+0.000886314\ttest-logloss:0.06304+0.00237566\n",
      "[102]\ttrain-logloss:0.0536827+0.000857382\ttest-logloss:0.0630397+0.00235802\n",
      "[103]\ttrain-logloss:0.0535377+0.000870019\ttest-logloss:0.063046+0.00237539\n",
      "[104]\ttrain-logloss:0.0534457+0.000849288\ttest-logloss:0.0630683+0.00240885\n",
      "[105]\ttrain-logloss:0.053334+0.000832985\ttest-logloss:0.0630547+0.00241316\n",
      "[106]\ttrain-logloss:0.0532513+0.00084306\ttest-logloss:0.063073+0.0024274\n",
      "[107]\ttrain-logloss:0.0531197+0.000805184\ttest-logloss:0.063094+0.00243626\n",
      "[108]\ttrain-logloss:0.0529993+0.000834942\ttest-logloss:0.063115+0.00243882\n",
      "[109]\ttrain-logloss:0.0529283+0.000792044\ttest-logloss:0.0631333+0.00242978\n",
      "[110]\ttrain-logloss:0.0528147+0.000809709\ttest-logloss:0.0631413+0.00242209\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[111]\ttrain-logloss:0.0527173+0.000830082\ttest-logloss:0.0631323+0.0024194\n",
      "best n_estimators: 103\n",
      "best cv score: 0.06303966666666666\n"
     ]
    }
   ],
   "source": [
    "params = {'learning_rate': 0.1,\n",
    "          #'n_estimators': 1000\n",
    "          'min_child_weight': 1,\n",
    "          'max_depth': 5,\n",
    "          'subsample': 0.7,\n",
    "          'colsample_bytree': 0.7,\n",
    "          'objective': 'binary:logistic',\n",
    "          #'num_class':2,\n",
    "          'n_jobs': 4\n",
    "         }\n",
    "\n",
    "n_estimators_1 = get_n_estimators(params , X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(n_estimators_1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "#第二步：调整树的参数：max_depth & min_child_weight\n",
    "#直接微调了\n",
    "max_depth = range(3,10,1)\n",
    "min_child_weight = range(1,7,1)\n",
    "tuned_params = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "params = {'learning_rate': 0.1,\n",
    "          'n_estimators': n_estimators_1,   #第一轮参数调整得到的n_estimators最优值\n",
    "          #'min_child_weight': 1,\n",
    "          #'max_depth': 5,\n",
    "          'subsample': 0.7,\n",
    "          'colsample_bytree': 0.7,\n",
    "          #'tree_method':'hist',\n",
    "          #'max_bin':127,\n",
    "          'objective': 'binary:logistic',\n",
    "          'nthread': 4\n",
    "         }\n",
    "\n",
    "xgb_g = XGBClassifier(silent=True,  **params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 42 candidates, totalling 126 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done  10 tasks      | elapsed:    7.1s\n",
      "[Parallel(n_jobs=4)]: Done  64 tasks      | elapsed:   48.8s\n",
      "[Parallel(n_jobs=4)]: Done 126 out of 126 | elapsed:  2.1min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "             error_score=nan,\n",
       "             estimator=XGBClassifier(base_score=0.5, booster='gbtree',\n",
       "                                     colsample_bylevel=1, colsample_bynode=1,\n",
       "                                     colsample_bytree=0.7, gamma=0,\n",
       "                                     learning_rate=0.1, max_delta_step=0,\n",
       "                                     max_depth=3, min_child_weight=1,\n",
       "                                     missing=None, n_estimators=103, n_jobs=1,\n",
       "                                     nthread=4, objective='binary:logistic',\n",
       "                                     random_state=0, reg_alpha=0, reg_lambda=1,\n",
       "                                     scale_pos_weight=1, seed=None, silent=True,\n",
       "                                     subsample=0.7, verbosity=1),\n",
       "             iid='deprecated', n_jobs=4,\n",
       "             param_grid={'max_depth': range(3, 10),\n",
       "                         'min_child_weight': range(1, 7)},\n",
       "             pre_dispatch='2*n_jobs', refit=False, return_train_score=False,\n",
       "             scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_search = GridSearchCV(xgb_g, param_grid = tuned_params, scoring='neg_log_loss',n_jobs=4, cv=kfold,verbose=5, refit = False)\n",
    "grid_search.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.063104 using {'max_depth': 4, 'min_child_weight': 5}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (grid_search.best_score_, grid_search.best_params_))\n",
    "test_means = grid_search.cv_results_[ 'mean_test_score' ]\n",
    "#test_stds = grid_search.cv_results_[ 'std_test_score' ]\n",
    "#train_means = grid_search.cv_results_[ 'mean_train_score' ]\n",
    "#train_stds = grid_search.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(grid_search.cv_results_).to_csv('maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "#train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    plt.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel( 'min_child_weight' )                                                                                                      \n",
    "plt.ylabel( 'Log Loss' )\n",
    "plt.savefig('max_depth_and_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 10 candidates, totalling 30 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done  10 tasks      | elapsed:    8.0s\n",
      "[Parallel(n_jobs=4)]: Done  30 out of  30 | elapsed:   19.8s remaining:    0.0s\n",
      "[Parallel(n_jobs=4)]: Done  30 out of  30 | elapsed:   19.8s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "             error_score=nan,\n",
       "             estimator=XGBClassifier(base_score=0.5, booster='gbtree',\n",
       "                                     colsample_bylevel=1, colsample_bynode=1,\n",
       "                                     colsample_bytree=0.7, gamma=0,\n",
       "                                     learning_rate=0.1, max_delta_step=0,\n",
       "                                     max_depth=4, min_child_weight=5,\n",
       "                                     missing=None, n_estimators=103, n_jobs=1,\n",
       "                                     nthread=4, objective='binary:logistic',\n",
       "                                     random_state=0, reg_alpha=0, reg_lambda=1,\n",
       "                                     scale_pos_weight=1, seed=None,\n",
       "                                     silent=False, subsample=1, verbosity=1),\n",
       "             iid='deprecated', n_jobs=4,\n",
       "             param_grid={'subsample': [0.9, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96,\n",
       "                                       0.97, 0.98, 0.99]},\n",
       "             pre_dispatch='2*n_jobs', refit=False, return_train_score=False,\n",
       "             scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#第三步 行采样比例\n",
    "subsample_s = [i/100.0 for i in range(90,100)]\n",
    "tuned_params = dict(subsample=subsample_s)\n",
    "\n",
    "\n",
    "params = {'learning_rate': 0.1,\n",
    "          'n_estimators': n_estimators_1,   #第一轮参数调整得到的n_estimators最优值\n",
    "          'min_child_weight': 5,\n",
    "          'max_depth': 4,\n",
    "         # 'subsample': 0.7,\n",
    "          'colsample_bytree': 0.7,\n",
    "          #'tree_method':'hist',\n",
    "          #'max_bin':127,\n",
    "          'objective': 'binary:logistic',\n",
    "          'nthread': 4\n",
    "         }\n",
    "\n",
    "xgb_g = XGBClassifier(silent=False,  **params)\n",
    "\n",
    "grid_search = GridSearchCV(xgb_g, param_grid = tuned_params, scoring='neg_log_loss',n_jobs=4, cv=kfold,verbose=5, refit = False)\n",
    "grid_search.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.063004 using {'subsample': 0.9}\n",
      "[-0.06300433 -0.06318192 -0.06309118 -0.06310367 -0.06313286 -0.06322582\n",
      " -0.06326929 -0.06314236 -0.06312585 -0.06311789]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (grid_search.best_score_, grid_search.best_params_))\n",
    "test_means = grid_search.cv_results_[ 'mean_test_score' ]\n",
    "\n",
    "pd.DataFrame(grid_search.cv_results_).to_csv('subsample.csv')\n",
    "\n",
    "plt.plot(subsample_s, -test_means)\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel( 'subsample' )                                                                                                      \n",
    "plt.ylabel( 'Log Loss' )\n",
    "plt.savefig('subsample.png' )\n",
    "\n",
    "print(test_means)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 10 candidates, totalling 30 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done  10 tasks      | elapsed:    7.7s\n",
      "[Parallel(n_jobs=4)]: Done  30 out of  30 | elapsed:   19.8s remaining:    0.0s\n",
      "[Parallel(n_jobs=4)]: Done  30 out of  30 | elapsed:   19.8s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "             error_score=nan,\n",
       "             estimator=XGBClassifier(base_score=0.5, booster='gbtree',\n",
       "                                     colsample_bylevel=1, colsample_bynode=1,\n",
       "                                     colsample_bytree=1, gamma=0,\n",
       "                                     learning_rate=0.1, max_delta_step=0,\n",
       "                                     max_depth=4, min_child_weight=5,\n",
       "                                     missing=None, n_estimators=103, n_jobs=1,\n",
       "                                     nthread=4, objective='binary:logistic',\n",
       "                                     random_state=0, reg_alpha=0, reg_lambda=1,\n",
       "                                     scale_pos_weight=1, seed=None,\n",
       "                                     silent=False, subsample=0.9, verbosity=1),\n",
       "             iid='deprecated', n_jobs=4,\n",
       "             param_grid={'colsample_bytree': [0.65, 0.66, 0.67, 0.68, 0.69, 0.7,\n",
       "                                              0.71, 0.72, 0.73, 0.74]},\n",
       "             pre_dispatch='2*n_jobs', refit=False, return_train_score=False,\n",
       "             scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#列采样比例\n",
    "colsample_bytree_s = [i/100.0 for i in range(65,75)]\n",
    "tuned_params = dict(colsample_bytree=colsample_bytree_s)\n",
    "\n",
    "params = {'learning_rate': 0.1,\n",
    "          'n_estimators': n_estimators_1,   #第一轮参数调整得到的n_estimators最优值\n",
    "          'min_child_weight': 5,\n",
    "          'max_depth': 4,\n",
    "          'subsample': 0.9,\n",
    "         # 'colsample_bytree': 0.7,\n",
    "          #'tree_method':'hist',\n",
    "          #'max_bin':127,\n",
    "          'objective': 'binary:logistic',\n",
    "          'nthread': 4\n",
    "         }\n",
    "\n",
    "xgb_g = XGBClassifier(silent=False,  **params)\n",
    "\n",
    "grid_search = GridSearchCV(xgb_g, param_grid = tuned_params, scoring='neg_log_loss',n_jobs=4, cv=kfold,verbose=5, refit = False)\n",
    "grid_search.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.063004 using {'colsample_bytree': 0.7}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (grid_search.best_score_, grid_search.best_params_))\n",
    "test_means = grid_search.cv_results_[ 'mean_test_score' ]\n",
    "\n",
    "pd.DataFrame(grid_search.cv_results_).to_csv('colsample_bytree.csv')\n",
    "\n",
    "plt.plot(colsample_bytree_s, -test_means)\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel( 'colsample_bytree' )                                                                                                      \n",
    "plt.ylabel( 'Log Loss' )\n",
    "plt.savefig('colsample_bytree.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 6 candidates, totalling 18 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done  10 tasks      | elapsed:    3.2s\n",
      "[Parallel(n_jobs=4)]: Done  15 out of  18 | elapsed:    8.1s remaining:    1.5s\n",
      "[Parallel(n_jobs=4)]: Done  18 out of  18 | elapsed:    8.4s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "             error_score=nan,\n",
       "             estimator=XGBClassifier(base_score=0.5, booster='gbtree',\n",
       "                                     colsample_bylevel=1, colsample_bynode=1,\n",
       "                                     colsample_bytree=0.7, gamma=0,\n",
       "                                     learning_rate=0.1, max_delta_step=0,\n",
       "                                     max_depth=4, min_child_weight=5,\n",
       "                                     missing=None, n_estimators=103, n_jobs=1,\n",
       "                                     nthread=4, objective='binary:logistic',\n",
       "                                     random_state=0, reg_alpha=0, reg_lambda=1,\n",
       "                                     scale_pos_weight=1, seed=None,\n",
       "                                     silent=False, subsample=0.9, verbosity=1),\n",
       "             iid='deprecated', n_jobs=4,\n",
       "             param_grid={'reg_lambda': range(-2, 4)}, pre_dispatch='2*n_jobs',\n",
       "             refit=False, return_train_score=False, scoring='neg_log_loss',\n",
       "             verbose=5)"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#第五步 正则系数reg_lambda\n",
    "#reg_lambda:L2正则 默认为1\n",
    "\n",
    "reg_lambda_s = range(0,4,1)\n",
    "tuned_params = dict(reg_lambda =reg_lambda_s)\n",
    "\n",
    "params = {'learning_rate': 0.1,\n",
    "          'n_estimators': n_estimators_1,   #第一轮参数调整得到的n_estimators最优值\n",
    "          'min_child_weight': 5,\n",
    "          'max_depth': 4,\n",
    "          'subsample': 0.9,\n",
    "          'colsample_bytree': 0.7,\n",
    "          #'tree_method':'hist',\n",
    "          #'max_bin':127,\n",
    "          'objective': 'binary:logistic',\n",
    "          'nthread': 4\n",
    "         }\n",
    "\n",
    "xgb_g = XGBClassifier(silent=False,  **params)\n",
    "\n",
    "grid_search = GridSearchCV(xgb_g, param_grid = tuned_params, scoring='neg_log_loss',n_jobs=4, cv=kfold,verbose=5, refit = False)\n",
    "grid_search.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.062983 using {'reg_lambda': 0}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (grid_search.best_score_, grid_search.best_params_))\n",
    "test_means = grid_search.cv_results_[ 'mean_test_score' ]\n",
    "\n",
    "pd.DataFrame(grid_search.cv_results_).to_csv('reg_lambda.csv')\n",
    "\n",
    "plt.plot(reg_lambda_s, -test_means)\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel( 'reg_lambda' )                                                                                                      \n",
    "plt.ylabel( 'Log Loss' )\n",
    "plt.savefig('reg_lambda.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 4 candidates, totalling 12 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=4)]: Using backend LokyBackend with 4 concurrent workers.\n",
      "[Parallel(n_jobs=4)]: Done   8 out of  12 | elapsed:    5.5s remaining:    2.7s\n",
      "[Parallel(n_jobs=4)]: Done  12 out of  12 | elapsed:    8.2s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=3, random_state=3, shuffle=True),\n",
       "             error_score=nan,\n",
       "             estimator=XGBClassifier(base_score=0.5, booster='gbtree',\n",
       "                                     colsample_bylevel=1, colsample_bynode=1,\n",
       "                                     colsample_bytree=0.7, gamma=0,\n",
       "                                     learning_rate=0.1, max_delta_step=0,\n",
       "                                     max_depth=4, min_child_weight=5,\n",
       "                                     missing=None, n_estimators=103, n_jobs=1,\n",
       "                                     nthread=4, objective='binary:logistic',\n",
       "                                     random_state=0, reg_alpha=0, reg_lambda=0,\n",
       "                                     scale_pos_weight=1, seed=None,\n",
       "                                     silent=False, subsample=0.9, verbosity=1),\n",
       "             iid='deprecated', n_jobs=4, param_grid={'reg_alpha': range(1, 5)},\n",
       "             pre_dispatch='2*n_jobs', refit=False, return_train_score=False,\n",
       "             scoring='neg_log_loss', verbose=5)"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#第六步 正则系数reg_alpha\n",
    "reg_alpha_s = range(1,5,1)\n",
    "tuned_params = dict(reg_alpha =reg_alpha_s)\n",
    "\n",
    "params = {'learning_rate': 0.1,\n",
    "          'n_estimators': n_estimators_1,   #第一轮参数调整得到的n_estimators最优值\n",
    "          'min_child_weight': 5,\n",
    "          'max_depth': 4,\n",
    "          'subsample': 0.9,\n",
    "          'colsample_bytree': 0.7,\n",
    "          'reg_lambda':0,\n",
    "          #'tree_method':'hist',\n",
    "          #'max_bin':127,\n",
    "          'objective': 'binary:logistic',\n",
    "          'nthread': 4\n",
    "         }\n",
    "\n",
    "xgb_g = XGBClassifier(silent=False,  **params)\n",
    "\n",
    "grid_search = GridSearchCV(xgb_g, param_grid = tuned_params, scoring='neg_log_loss',n_jobs=4, cv=kfold,verbose=5, refit = False)\n",
    "grid_search.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.063090 using {'reg_alpha': 2}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (grid_search.best_score_, grid_search.best_params_))\n",
    "test_means = grid_search.cv_results_[ 'mean_test_score' ]\n",
    "\n",
    "pd.DataFrame(grid_search.cv_results_).to_csv('reg_alpha.csv')\n",
    "\n",
    "plt.plot(reg_alpha_s, -test_means)\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel( 'reg_alpha' )                                                                                                      \n",
    "plt.ylabel( 'Log Loss' )\n",
    "plt.savefig('reg_alpha.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\ttrain-logloss:0.603512+9.86453e-05\ttest-logloss:0.603549+1.00333e-05\n",
      "[1]\ttrain-logloss:0.530186+0.000207946\ttest-logloss:0.530189+6.04998e-05\n",
      "[2]\ttrain-logloss:0.469094+0.000282169\ttest-logloss:0.469113+0.000118108\n",
      "[3]\ttrain-logloss:0.417629+0.000252969\ttest-logloss:0.417651+0.000194226\n",
      "[4]\ttrain-logloss:0.373708+0.000322211\ttest-logloss:0.373747+0.000247313\n",
      "[5]\ttrain-logloss:0.336019+0.00038762\ttest-logloss:0.336087+0.000299504\n",
      "[6]\ttrain-logloss:0.303454+0.000469477\ttest-logloss:0.303537+0.000350783\n",
      "[7]\ttrain-logloss:0.275156+0.000491931\ttest-logloss:0.275277+0.000392753\n",
      "[8]\ttrain-logloss:0.250521+0.000553006\ttest-logloss:0.250639+0.000420246\n",
      "[9]\ttrain-logloss:0.228929+0.00057066\ttest-logloss:0.229065+0.000484205\n",
      "[10]\ttrain-logloss:0.209979+0.00060788\ttest-logloss:0.210148+0.000544755\n",
      "[11]\ttrain-logloss:0.193331+0.000624398\ttest-logloss:0.193499+0.000609222\n",
      "[12]\ttrain-logloss:0.178643+0.000657156\ttest-logloss:0.178819+0.000670315\n",
      "[13]\ttrain-logloss:0.165652+0.000678391\ttest-logloss:0.165867+0.00072458\n",
      "[14]\ttrain-logloss:0.154173+0.000687888\ttest-logloss:0.154418+0.00079514\n",
      "[15]\ttrain-logloss:0.144049+0.000707069\ttest-logloss:0.144299+0.000840301\n",
      "[16]\ttrain-logloss:0.135033+0.000751713\ttest-logloss:0.135304+0.000878864\n",
      "[17]\ttrain-logloss:0.127067+0.000759379\ttest-logloss:0.127357+0.000942177\n",
      "[18]\ttrain-logloss:0.119971+0.000760486\ttest-logloss:0.12032+0.00100765\n",
      "[19]\ttrain-logloss:0.113672+0.00079089\ttest-logloss:0.11405+0.00104728\n",
      "[20]\ttrain-logloss:0.108075+0.000806544\ttest-logloss:0.108485+0.00108492\n",
      "[21]\ttrain-logloss:0.1031+0.000824539\ttest-logloss:0.103554+0.00113227\n",
      "[22]\ttrain-logloss:0.0986837+0.000840177\ttest-logloss:0.099166+0.00117636\n",
      "[23]\ttrain-logloss:0.0947747+0.000874246\ttest-logloss:0.0953077+0.00121528\n",
      "[24]\ttrain-logloss:0.0912897+0.000883928\ttest-logloss:0.0918853+0.0012773\n",
      "[25]\ttrain-logloss:0.0881747+0.000887751\ttest-logloss:0.0888153+0.00133171\n",
      "[26]\ttrain-logloss:0.08541+0.000888697\ttest-logloss:0.086078+0.0013765\n",
      "[27]\ttrain-logloss:0.0829777+0.000864219\ttest-logloss:0.0836817+0.00146899\n",
      "[28]\ttrain-logloss:0.080785+0.000866534\ttest-logloss:0.081562+0.00153161\n",
      "[29]\ttrain-logloss:0.0788313+0.000905857\ttest-logloss:0.079656+0.00155086\n",
      "[30]\ttrain-logloss:0.0770777+0.000913372\ttest-logloss:0.0779517+0.00156844\n",
      "[31]\ttrain-logloss:0.0755043+0.000912817\ttest-logloss:0.0764437+0.00160092\n",
      "[32]\ttrain-logloss:0.074139+0.000909814\ttest-logloss:0.0751557+0.00166333\n",
      "[33]\ttrain-logloss:0.0729353+0.000887437\ttest-logloss:0.073992+0.00172308\n",
      "[34]\ttrain-logloss:0.0718343+0.000923539\ttest-logloss:0.0729187+0.0017405\n",
      "[35]\ttrain-logloss:0.0708423+0.000931982\ttest-logloss:0.0719637+0.00177016\n",
      "[36]\ttrain-logloss:0.0699633+0.000940223\ttest-logloss:0.0711387+0.00180686\n",
      "[37]\ttrain-logloss:0.069168+0.000949157\ttest-logloss:0.0703917+0.00183693\n",
      "[38]\ttrain-logloss:0.0684327+0.000967084\ttest-logloss:0.0696867+0.00185563\n",
      "[39]\ttrain-logloss:0.0677733+0.000972432\ttest-logloss:0.0690833+0.0018732\n",
      "[40]\ttrain-logloss:0.067191+0.000988972\ttest-logloss:0.0685357+0.001888\n",
      "[41]\ttrain-logloss:0.066688+0.00102086\ttest-logloss:0.068085+0.00188644\n",
      "[42]\ttrain-logloss:0.0662167+0.00100177\ttest-logloss:0.0676817+0.0019323\n",
      "[43]\ttrain-logloss:0.065787+0.000999172\ttest-logloss:0.06731+0.00196469\n",
      "[44]\ttrain-logloss:0.065421+0.000992204\ttest-logloss:0.0669777+0.00200099\n",
      "[45]\ttrain-logloss:0.06507+0.000994756\ttest-logloss:0.0666843+0.00203987\n",
      "[46]\ttrain-logloss:0.0647273+0.00100188\ttest-logloss:0.0663897+0.00204599\n",
      "[47]\ttrain-logloss:0.0644337+0.00100138\ttest-logloss:0.0661377+0.00205223\n",
      "[48]\ttrain-logloss:0.0641753+0.00100693\ttest-logloss:0.065933+0.00207156\n",
      "[49]\ttrain-logloss:0.0639417+0.00103974\ttest-logloss:0.0657453+0.00205294\n",
      "[50]\ttrain-logloss:0.063745+0.00102463\ttest-logloss:0.0655783+0.00207108\n",
      "[51]\ttrain-logloss:0.0635633+0.00100532\ttest-logloss:0.0654397+0.00209958\n",
      "[52]\ttrain-logloss:0.0633453+0.0010138\ttest-logloss:0.0652617+0.00212664\n",
      "[53]\ttrain-logloss:0.0631103+0.0010243\ttest-logloss:0.0651043+0.0020983\n",
      "[54]\ttrain-logloss:0.0629473+0.00102378\ttest-logloss:0.0649523+0.00210615\n",
      "[55]\ttrain-logloss:0.062788+0.00102902\ttest-logloss:0.06485+0.00212074\n",
      "[56]\ttrain-logloss:0.0626563+0.00103675\ttest-logloss:0.064745+0.00210398\n",
      "[57]\ttrain-logloss:0.062519+0.00102389\ttest-logloss:0.0646487+0.00210507\n",
      "[58]\ttrain-logloss:0.0623863+0.00103147\ttest-logloss:0.0645627+0.0021249\n",
      "[59]\ttrain-logloss:0.0622733+0.00103085\ttest-logloss:0.0644653+0.00213453\n",
      "[60]\ttrain-logloss:0.0621397+0.00105209\ttest-logloss:0.064377+0.00214196\n",
      "[61]\ttrain-logloss:0.062044+0.00107066\ttest-logloss:0.0643417+0.00212888\n",
      "[62]\ttrain-logloss:0.0619333+0.00109836\ttest-logloss:0.0642787+0.002119\n",
      "[63]\ttrain-logloss:0.0618073+0.00109586\ttest-logloss:0.0642247+0.00211617\n",
      "[64]\ttrain-logloss:0.0616943+0.00108613\ttest-logloss:0.06416+0.00214056\n",
      "[65]\ttrain-logloss:0.061584+0.00109045\ttest-logloss:0.064094+0.0021596\n",
      "[66]\ttrain-logloss:0.0614983+0.00108863\ttest-logloss:0.0640483+0.00217011\n",
      "[67]\ttrain-logloss:0.061355+0.00112298\ttest-logloss:0.0639547+0.00213312\n",
      "[68]\ttrain-logloss:0.061276+0.00110322\ttest-logloss:0.0639083+0.00214703\n",
      "[69]\ttrain-logloss:0.0611747+0.00110613\ttest-logloss:0.063869+0.00216378\n",
      "[70]\ttrain-logloss:0.0610613+0.00106089\ttest-logloss:0.063787+0.00220195\n",
      "[71]\ttrain-logloss:0.0609917+0.00105802\ttest-logloss:0.06375+0.00220419\n",
      "[72]\ttrain-logloss:0.0609183+0.00105379\ttest-logloss:0.063703+0.00222042\n",
      "[73]\ttrain-logloss:0.060792+0.00103703\ttest-logloss:0.0636173+0.00226023\n",
      "[74]\ttrain-logloss:0.0607137+0.00102747\ttest-logloss:0.0635897+0.00228714\n",
      "[75]\ttrain-logloss:0.0606143+0.00101829\ttest-logloss:0.0635543+0.0022842\n",
      "[76]\ttrain-logloss:0.0605483+0.00101537\ttest-logloss:0.063543+0.00230807\n",
      "[77]\ttrain-logloss:0.060479+0.00100872\ttest-logloss:0.0635083+0.00231596\n",
      "[78]\ttrain-logloss:0.0604093+0.000989702\ttest-logloss:0.0634853+0.00230361\n",
      "[79]\ttrain-logloss:0.0603463+0.000960695\ttest-logloss:0.0634503+0.00233668\n",
      "[80]\ttrain-logloss:0.060265+0.000981201\ttest-logloss:0.0634373+0.00232769\n",
      "[81]\ttrain-logloss:0.060182+0.000971565\ttest-logloss:0.0634157+0.00233033\n",
      "[82]\ttrain-logloss:0.0601223+0.000980719\ttest-logloss:0.063391+0.00233211\n",
      "[83]\ttrain-logloss:0.06006+0.000990772\ttest-logloss:0.063369+0.00231856\n",
      "[84]\ttrain-logloss:0.0599697+0.000965234\ttest-logloss:0.0633383+0.00232526\n",
      "[85]\ttrain-logloss:0.059913+0.000972198\ttest-logloss:0.063304+0.00232767\n",
      "[86]\ttrain-logloss:0.059823+0.000972034\ttest-logloss:0.0632847+0.00233279\n",
      "[87]\ttrain-logloss:0.0597467+0.000998012\ttest-logloss:0.063283+0.00235933\n",
      "[88]\ttrain-logloss:0.05967+0.000984297\ttest-logloss:0.0632473+0.00237174\n",
      "[89]\ttrain-logloss:0.0596157+0.000995503\ttest-logloss:0.0632367+0.00237005\n",
      "[90]\ttrain-logloss:0.0595403+0.000987799\ttest-logloss:0.063202+0.00236077\n",
      "[91]\ttrain-logloss:0.059481+0.00100807\ttest-logloss:0.0631953+0.00235359\n",
      "[92]\ttrain-logloss:0.0594333+0.00100465\ttest-logloss:0.0631837+0.00235243\n",
      "[93]\ttrain-logloss:0.0593593+0.000979328\ttest-logloss:0.063163+0.00239796\n",
      "[94]\ttrain-logloss:0.0593027+0.000987396\ttest-logloss:0.0631527+0.00239985\n",
      "[95]\ttrain-logloss:0.059247+0.000981888\ttest-logloss:0.0631297+0.00240608\n",
      "[96]\ttrain-logloss:0.0591793+0.000990877\ttest-logloss:0.0631057+0.00241766\n",
      "[97]\ttrain-logloss:0.0590997+0.00101366\ttest-logloss:0.0630937+0.00241277\n",
      "[98]\ttrain-logloss:0.0590097+0.000986005\ttest-logloss:0.0630673+0.00241667\n",
      "[99]\ttrain-logloss:0.0589597+0.000990179\ttest-logloss:0.0630627+0.00241678\n",
      "[100]\ttrain-logloss:0.0589047+0.000984857\ttest-logloss:0.063052+0.00240284\n",
      "[101]\ttrain-logloss:0.0588363+0.000967213\ttest-logloss:0.0630423+0.00242068\n",
      "[102]\ttrain-logloss:0.058786+0.0009651\ttest-logloss:0.063039+0.00242022\n",
      "[103]\ttrain-logloss:0.0587243+0.000928743\ttest-logloss:0.0630327+0.00242021\n",
      "[104]\ttrain-logloss:0.058644+0.00092787\ttest-logloss:0.0630007+0.00241789\n",
      "[105]\ttrain-logloss:0.058597+0.000930845\ttest-logloss:0.063009+0.00242603\n",
      "[106]\ttrain-logloss:0.0585367+0.000943642\ttest-logloss:0.063022+0.00243579\n",
      "[107]\ttrain-logloss:0.0584543+0.000949803\ttest-logloss:0.063011+0.00245404\n",
      "[108]\ttrain-logloss:0.0583993+0.000954165\ttest-logloss:0.0630087+0.00245993\n",
      "[109]\ttrain-logloss:0.0583367+0.000970815\ttest-logloss:0.063002+0.00246315\n",
      "[110]\ttrain-logloss:0.0582763+0.000950426\ttest-logloss:0.0629953+0.00245904\n",
      "[111]\ttrain-logloss:0.0581927+0.000959804\ttest-logloss:0.0629833+0.00246136\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[112]\ttrain-logloss:0.058105+0.000962449\ttest-logloss:0.0629967+0.00247251\n",
      "[113]\ttrain-logloss:0.058022+0.000983322\ttest-logloss:0.0629613+0.00245033\n",
      "[114]\ttrain-logloss:0.0579743+0.000987373\ttest-logloss:0.0629627+0.00244959\n",
      "[115]\ttrain-logloss:0.057856+0.000999636\ttest-logloss:0.0629067+0.00241029\n",
      "[116]\ttrain-logloss:0.0577943+0.00101441\ttest-logloss:0.062897+0.00241833\n",
      "[117]\ttrain-logloss:0.0577427+0.00103069\ttest-logloss:0.062902+0.00242398\n",
      "[118]\ttrain-logloss:0.0576973+0.00104319\ttest-logloss:0.0628963+0.00242431\n",
      "[119]\ttrain-logloss:0.0576333+0.00102167\ttest-logloss:0.0628853+0.00245607\n",
      "[120]\ttrain-logloss:0.057558+0.00102512\ttest-logloss:0.0628903+0.00245467\n",
      "[121]\ttrain-logloss:0.0574863+0.00105323\ttest-logloss:0.0628903+0.00244412\n",
      "[122]\ttrain-logloss:0.0574367+0.00104296\ttest-logloss:0.0629097+0.00245029\n",
      "[123]\ttrain-logloss:0.0573907+0.00105498\ttest-logloss:0.0629173+0.00245563\n",
      "[124]\ttrain-logloss:0.057329+0.00108693\ttest-logloss:0.062905+0.00244685\n",
      "[125]\ttrain-logloss:0.0572753+0.00111031\ttest-logloss:0.0629043+0.00245305\n",
      "[126]\ttrain-logloss:0.0571873+0.00111666\ttest-logloss:0.062876+0.00244916\n",
      "[127]\ttrain-logloss:0.057123+0.00110876\ttest-logloss:0.0628893+0.00245812\n",
      "[128]\ttrain-logloss:0.057089+0.00109129\ttest-logloss:0.0628853+0.00246689\n",
      "[129]\ttrain-logloss:0.0570447+0.00110034\ttest-logloss:0.0628837+0.00247732\n",
      "[130]\ttrain-logloss:0.0569873+0.00109656\ttest-logloss:0.0628753+0.00246879\n",
      "[131]\ttrain-logloss:0.0569467+0.00110329\ttest-logloss:0.0628807+0.00246545\n",
      "[132]\ttrain-logloss:0.0569093+0.00110382\ttest-logloss:0.062873+0.00246653\n",
      "[133]\ttrain-logloss:0.0568513+0.00109263\ttest-logloss:0.0628657+0.00246157\n",
      "[134]\ttrain-logloss:0.0568073+0.00110061\ttest-logloss:0.06286+0.00245567\n",
      "[135]\ttrain-logloss:0.056768+0.00109198\ttest-logloss:0.062863+0.00244316\n",
      "[136]\ttrain-logloss:0.0567297+0.00110089\ttest-logloss:0.0628667+0.00244133\n",
      "[137]\ttrain-logloss:0.0566887+0.00111013\ttest-logloss:0.062854+0.00243056\n",
      "[138]\ttrain-logloss:0.0566283+0.00109492\ttest-logloss:0.0628563+0.00243365\n",
      "[139]\ttrain-logloss:0.0565713+0.00110501\ttest-logloss:0.0628633+0.00245154\n",
      "[140]\ttrain-logloss:0.0565163+0.00110232\ttest-logloss:0.062876+0.0024485\n",
      "[141]\ttrain-logloss:0.0564643+0.00110026\ttest-logloss:0.0628763+0.00245942\n",
      "[142]\ttrain-logloss:0.0564137+0.00108327\ttest-logloss:0.0628793+0.00246048\n",
      "[143]\ttrain-logloss:0.0563567+0.00109644\ttest-logloss:0.0628713+0.00244498\n",
      "[144]\ttrain-logloss:0.0563187+0.00108785\ttest-logloss:0.0628597+0.00245553\n",
      "[145]\ttrain-logloss:0.0562563+0.00108274\ttest-logloss:0.0628683+0.00246193\n",
      "[146]\ttrain-logloss:0.056213+0.00109706\ttest-logloss:0.0628603+0.00245353\n",
      "[147]\ttrain-logloss:0.0561583+0.00111981\ttest-logloss:0.062846+0.00244918\n",
      "[148]\ttrain-logloss:0.0561087+0.00111929\ttest-logloss:0.062832+0.00244849\n",
      "[149]\ttrain-logloss:0.0560533+0.00109509\ttest-logloss:0.0628323+0.00246169\n",
      "[150]\ttrain-logloss:0.056008+0.00109882\ttest-logloss:0.0628383+0.002462\n",
      "[151]\ttrain-logloss:0.0559493+0.00110196\ttest-logloss:0.0628417+0.0024769\n",
      "[152]\ttrain-logloss:0.0558843+0.00108755\ttest-logloss:0.062837+0.00248345\n",
      "[153]\ttrain-logloss:0.055836+0.00107628\ttest-logloss:0.0628347+0.00250005\n",
      "[154]\ttrain-logloss:0.055792+0.00107269\ttest-logloss:0.0628383+0.00250128\n",
      "[155]\ttrain-logloss:0.055741+0.00106547\ttest-logloss:0.0628473+0.00249935\n",
      "[156]\ttrain-logloss:0.055688+0.00105311\ttest-logloss:0.0628387+0.00248776\n",
      "[157]\ttrain-logloss:0.0556353+0.00104235\ttest-logloss:0.0628363+0.00248987\n",
      "best n_estimators: 149\n",
      "best cv score: 0.062832\n"
     ]
    }
   ],
   "source": [
    "#最后，用树的最佳参数，再次调整学习率和基学习器的数目\n",
    "params = {'learning_rate': 0.1,\n",
    "          #'n_estimators': n_estimators_1,   #第一轮参数调整得到的n_estimators最优值\n",
    "          'min_child_weight': 5,\n",
    "          'max_depth': 4,\n",
    "          'subsample': 0.9,\n",
    "          'colsample_bytree': 0.7,\n",
    "          'reg_lambda':0,\n",
    "          'reg_alpha':2,\n",
    "          #'tree_method':'hist',\n",
    "          #'max_bin':127,\n",
    "          'objective': 'binary:logistic',\n",
    "          'nthread': 4\n",
    "         }\n",
    "\n",
    "n_estimators_2 = get_n_estimators(params , X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n",
       "              colsample_bynode=1, colsample_bytree=0.7, gamma=0,\n",
       "              learning_rate=0.1, max_delta_step=0, max_depth=4,\n",
       "              min_child_weight=5, missing=None, n_estimators=149, n_jobs=1,\n",
       "              nthread=4, objective='binary:logistic', random_state=0,\n",
       "              reg_alpha=2, reg_lambda=0, scale_pos_weight=1, seed=None,\n",
       "              silent=None, subsample=0.9, verbosity=1)"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#用所有训练数据，采用最佳参数重新训练模型\n",
    "params = {'learning_rate': 0.1,\n",
    "          'n_estimators': n_estimators_2,   #第一轮参数调整得到的n_estimators最优值\n",
    "          'min_child_weight': 5,\n",
    "          'max_depth': 4,\n",
    "          'subsample': 0.9,\n",
    "          'colsample_bytree': 0.7,\n",
    "          'reg_lambda':0,\n",
    "          'reg_alpha':2,\n",
    "          #'tree_method':'hist',\n",
    "          #'max_bin':127,\n",
    "          'objective': 'binary:logistic',\n",
    "          'nthread': 4\n",
    "         }\n",
    "\n",
    "xgb_g = XGBClassifier(**params)\n",
    "xgb_g.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "#保存模型，用于后续测试\n",
    "import pickle as pk\n",
    "\n",
    "pk.dump(xgb_g, open(\"Bank_XGBoost_org.pkl\", 'wb'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [],
   "source": [
    "#特征重要性\n",
    "df = pd.DataFrame({\"columns\":list(feat_names), \"importance\":list(xgb_g.feature_importances_.T)})\n",
    "df = df.sort_values(by=['importance'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                      columns  importance\n",
      "2              Monthly_Income    0.153491\n",
      "8                        Var5    0.107322\n",
      "12              Interest_Rate    0.062881\n",
      "18                     Source    0.061754\n",
      "0                      Gender    0.057086\n",
      "19                       Var4    0.051466\n",
      "6              Salary_Account    0.046693\n",
      "5                Existing_EMI    0.046248\n",
      "15                Filled_Form    0.044845\n",
      "17                       Var2    0.038476\n",
      "3         Loan_Amount_Applied    0.032949\n",
      "16                Device_Type    0.032752\n",
      "1                        City    0.032728\n",
      "4         Loan_Tenure_Applied    0.031104\n",
      "10      Loan_Amount_Submitted    0.030512\n",
      "11      Loan_Tenure_Submitted    0.029948\n",
      "7             Mobile_Verified    0.029783\n",
      "9                        Var1    0.027441\n",
      "14         EMI_Loan_Submitted    0.026398\n",
      "13             Processing_Fee    0.023594\n",
      "20   Lead_Creation_Date_Month    0.017381\n",
      "21  Lead_Creation_Date_Season    0.015147\n",
      "22    Lead_Creation_Date_Year    0.000000\n"
     ]
    }
   ],
   "source": [
    "print(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plt.bar(range(len(xgb_g.feature_importances_)), xgb_g.feature_importances_)\n",
    "#plt.show()\n",
    "type(df['columns'])\n",
    "#plt.bar(df['columns'], xgb_g.feature_importances_)\n",
    "#plt.show()\n",
    "fig, ax = plt.subplots(nrows=1,ncols=1,figsize=(20,10))\n",
    "ax.xaxis.set_tick_params(rotation=40)\n",
    "ax.bar(df['columns'], df['importance'])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
